<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>To Do List</title>
</head>
<body>
    <div id="todo-list-example">
        <form v-on:submit.prevent="addNewTodo">
            <label for="new-todo">Add a todo</label>
            <input v-model="newTodoText" id="new-todo" placeholder="e.g. Feed the cat">
            <button>Add</button>
            <ul>
                <li
                is="todo-item"
                v-for="(todo, index) in todos"
                v-bind:key="todo.id"
                v-bind:title="todo.title"
                v-on:remove="todos.splice(index, 1)">
                </li>
            </ul>
        </form>
    </div>
    <script src="https://cdn.jsdelivr.net/npm/vue@2.6.14"></script>
    <script>
        Vue.component('todo-item', {
            template: '\<li>\{{ title }}\<button v-on:click="$emit(\'remove\')">Remove</button>\</li>\
            ',
            props: ['title']
        })
        new Vue({
            el: '#todo-list-example',
            data: {
                newTodoText: '',
                todos: [
                    {id: 1, title: 'Do the dishes'},
                    {id: 2, title: 'Take out the trash'},
                    {id: 3, title: 'Study how to use Vue'},
                    {id: 4, title: 'Jump 500 times'},
                    {id: 5, title: 'Have a nice sleep'}
                ],
                newTodoId: 6
            },
            methods: {
                addNewTodo: function () {
                    this.todos.push({
                        id: this.newTodoId++,
                        title: this.newTodoText
                    })
                    this.newTodoText = ''
                }
            }
        })
    </script>
</body>
</html>